<?php

//执行mysql语句
//直接把执行语句发送过来即可
//$debug 控制不调试，1返回语句，2返回结果，3返回语句和结果

function execute_query($sql_query,$debug = false)
{

    global $pdo;


    // 更准确的版本判断
    if (PHP_VERSION_ID >= 50700) {  // PHP 5.7.0+
        // 检查 PDO 是否可用
        if (!isset($pdo) || !($pdo instanceof PDO)) {
            throw new Exception("PDO connection not available");
        }

        try {
            $stmt = $pdo->query($sql_query);

            if ($stmt === false) {
                throw new Exception("Query execution failed: " . $pdo->errorInfo()[2]);
            }


            // 检查是否是UPDATE、INSERT或DELETE语句,因为这三个不返回数据集
            $queryType = strtoupper(substr(trim($sql_query), 0, 6));

            if (in_array($queryType, ['UPDATE', 'INSERT', 'DELETE'])) {
                $affectedRows = $stmt->rowCount();

                // 如果需要调试输出
                if ($debug == 1) {
                    echo "SQL Query: " . $sql_query . "<br>";
                }
                if ($debug == 2) {
                    echo "Affected Rows: " . $affectedRows . "<br>";
                }
                if ($debug == 3) {
                    echo "SQL Query: " . $sql_query . "<br>";
                    echo "Affected Rows: " . $affectedRows . "<br>";
                }

                return $affectedRows;
            }
            else
            {
            //不管怎样，我返回的都是二维数组。返回之后，在那边根据情况获取数值
            //不管怎样，我返回的都是二维数组。返回之后，在那边根据情况获取数值
            //不管怎样，我返回的都是二维数组。返回之后，在那边根据情况获取数值
            //不管怎样，我返回的都是二维数组。返回之后，在那边根据情况获取数值
            //不管怎样，我返回的都是二维数组。返回之后，在那边根据情况获取数值
            //不管怎样，我返回的都是二维数组。返回之后，在那边根据情况获取数值
            //不管怎样，我返回的都是二维数组。返回之后，在那边根据情况获取数值
            //不管怎样，我返回的都是二维数组。返回之后，在那边根据情况获取数值
            while ($row = $stmt->fetch(PDO::FETCH_ASSOC))
            {
                $result[] = $row;
            }


            // 如果需要调试输出
            if($debug == 1)
            {
                echo "SQL Query: " . $sql_query . "<br>";
            }
            if($debug == 2)
            {
                echo "Result: ";
                var_dump($result);

            }
            if($debug == 3)
            {
                echo "SQL Query: " . $sql_query . "<br>";
                echo "Result: ";
                var_dump($result);
            }

            return $result ?: [];  // 如果没有数据返回空数组
            }

        } catch (PDOException $e) {

            // 处理数据库查询错误。美化排版
            $error_message = "Database query failed: " . $e->getMessage() . "\n";
            $error_message .= "SQL Query: " . $sql_query . "\n";
            $error_message .= "File: " . $e->getFile() . "\n";
            $error_message .= "Line: " . $e->getLine() . "\n";
            $error_message .= "Stack trace:\n" . $e->getTraceAsString();

            echo "<pre style='background-color: #ffe6e6; border: 1px solid #ff0000; padding: 15px; color: #333; font-family: monospace;'>";
            echo htmlspecialchars($error_message);
            echo "</pre>";


            throw new Exception("Database query failed: " . $e->getMessage());


        }
    }
    else
    {
        global $dblink;
        $result = mysql_query($sql_query, $dblink);

        if ($result) {
            $values = [];
            while ($row = mysql_fetch_assoc($result)) {
                $values[] = $row;
            }
            mysql_free_result($result);
            return $values;
        }
        return [];

    }


}





?>